/**
 * 路由管理模块 - 基于mp-router库
 * 
 * 提供更便捷和规范的路由管理方式
 */

// 导入mp-router
const mpRouter = require('../../../miniprogram_npm/mp-router/index');
const routerConfig = require('./router-config');

// 初始化路由
mpRouter.init({
  routes: routerConfig.routeMap
});

// 导出路由方法
module.exports = {
  /**
   * 普通导航
   * @param {object} options 路由配置对象
   */
  push(options) {
    mpRouter.push(options);
  },

  /**
   * 重定向导航
   * @param {object} options 路由配置对象
   */
  replace(options) {
    mpRouter.replace(options);
  },

  /**
   * 返回上级页面
   * @param {number} delta 返回的层级，默认1
   */
  back(delta = 1) {
    mpRouter.pop({
      delta
    });
  },

  /**
   * 重新加载页面
   * @param {object} options 路由配置对象
   */
  reLaunch(options) {
    mpRouter.relaunch(options);
  },

  /**
   * 跳转到TabBar页面
   * @param {string} name Tab页面路由名
   */
  switchTab(name) {
    mpRouter.push({
      name
    });
  },

  /**
   * 获取当前页面路由信息
   * @returns {object} 当前路由信息
   */
  currentRoute() {
    const pages = getCurrentPages();
    if (pages.length > 0) {
      const currentPage = pages[pages.length - 1];
      return {
        path: `/${currentPage.route}`,
        query: currentPage.options || {}
      };
    }
    return null;
  },

  /**
   * 将参数对象转换为URL查询字符串
   * @param {object} params 参数对象
   * @returns {string} 查询字符串
   */
  stringifyQuery(params) {
    if (!params || typeof params !== 'object') return '';
    
    return Object.keys(params)
      .filter(key => params[key] !== undefined && params[key] !== null)
      .map(key => {
        let value = params[key];
        if (typeof value === 'object') {
          value = JSON.stringify(value);
        }
        return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;
      })
      .join('&');
  },

  /**
   * 解析URL查询字符串为对象
   * @param {string} queryString 查询字符串
   * @returns {object} 参数对象
   */
  parseQuery(queryString) {
    const query = {};
    if (!queryString || typeof queryString !== 'string') return query;
    
    const pairs = queryString.substr(1).split('&');
    for (let i = 0; i < pairs.length; i++) {
      const pair = pairs[i].split('=');
      if (pair.length === 2) {
        const key = decodeURIComponent(pair[0]);
        let value = decodeURIComponent(pair[1]);
        
        // 尝试解析JSON
        try {
          if (value.startsWith('{') || value.startsWith('[')) {
            value = JSON.parse(value);
          }
        } catch (e) {
          // 解析失败，保持原样
        }
        
        query[key] = value;
      }
    }
    
    return query;
  },

  /**
   * 获取路由中的复杂数据
   * @param {Object} options 页面参数
   * @returns {Object|null} 解码后的数据对象
   */
  extractData(options) {
    return mpRouter.extract(options);
  }
}; 